home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / pack / powerpacker / ppfast_dec.s next >
Text File  |  1980-01-03  |  7KB  |  476 lines

  1. *******************************************************************************
  2. * PowerPacker Data Decompression
  3. * ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  4. * INPUTS :    a1    =    Destination
  5. *        a2    =    Source
  6. *        d0    =    Length of source
  7. *******************************************************************************
  8.  
  9. PPData:        lea    PPB_24E(pc),a5
  10.         move.l    a2,a0            ;make copy in a0
  11.         add.l    d0,a0            ;PTR END (of PPacked data)
  12.  
  13.         addq.l    #4,a2            ;skip past ID header
  14.         moveq    #$18,d6
  15.         moveq    #0,d4
  16.         moveq    #1,d5
  17.         move.l    d5,d7
  18.  
  19.         move.l    a1,a4
  20.         move.l    -(a0),d1
  21.         move.l    d1,-(sp)        ;save unpacked length
  22.  
  23.         tst.b    d1
  24.         beq.s    PP_22
  25.         lsr.l    d7,d5
  26.         beq.s    PP_5E
  27. PP_1E:        sub.b    d7,d1
  28.         lsr.l    d1,d5
  29. PP_22:        lsr.l    #8,d1
  30.         add.l    d1,a1
  31. PP_26:        lsr.l    d7,d5
  32.         beq.s    PP_64
  33. PP_2A:        bcs    PP_CC
  34.         moveq    #0,d2
  35. PP_30:        moveq    #0,d1
  36.         lsr.l    d7,d5
  37.         beq.s    PP_6A
  38. PP_36:        roxl.w    d7,d1
  39.         lsr.l    d7,d5
  40.         beq.s    PP_70
  41. PP_3C:        roxl.w    d7,d1
  42.         add.w    d1,d2
  43.         subq.w    #3,d1
  44.         beq.s    PP_30
  45.         moveq    #0,d0
  46. PP_46:        move.b    d5,d4
  47.         lsr.l    #8,d5
  48.         beq.s    PP_82
  49. PP_4C:        move.b    -$80(a5,d4.w),d0
  50.         move.b    d0,-(a1)
  51.         dbra    d2,PP_46
  52.         cmp.l    a1,a4
  53.         bcs.s    PP_CC
  54.         bra    PP_1AA
  55.  
  56. PP_5E:        move.l    -(a0),d5
  57.         roxr.l    d7,d5
  58.         bra.s    PP_1E
  59.  
  60. PP_64:        move.l    -(a0),d5
  61.         roxr.l    d7,d5
  62.         bra.s    PP_2A
  63.  
  64. PP_6A:        move.l    -(a0),d5
  65.         roxr.l    d7,d5
  66.         bra.s    PP_36
  67.  
  68. PP_70:        move.l    -(a0),d5
  69.         roxr.l    d7,d5
  70.         bra.s    PP_3C
  71.  
  72. PP_76:        move.l    -(a0),d5
  73.         roxr.l    d7,d5
  74.         bra.s    PP_D2
  75.  
  76. PP_7C:        move.l    -(a0),d5
  77.         roxr.l    d7,d5
  78.         bra.s    PP_D8
  79.  
  80. PP_82:        move.b    $7F(a5,d4.w),d0
  81.         move.l    -(a0),d5
  82.         move.w    d5,d3
  83.         lsl.w    d0,d3
  84.         bchg    d0,d3
  85.         eor.w    d3,d4
  86.         and.w    #$ff,d4
  87.         moveq    #8,d1
  88.         sub.w    d0,d1
  89.         lsr.l    d1,d5
  90.         add.w    d6,d0
  91.         bset    d0,d5
  92.         bra.s    PP_4C
  93.  
  94. PP_9E:        move.b    $7F(a5,d4.w),d0
  95.         move.l    -(a0),d5
  96.         move.w    d5,d3
  97.         lsl.w    d0,d3
  98.         bchg    d0,d3
  99.         eor.w    d3,d4
  100.         and.w    #$ff,d4
  101.         moveq    #8,d1
  102.         sub.w    d0,d1
  103.         lsr.l    d1,d5
  104.         add.w    d6,d0
  105.         bset    d0,d5
  106.         bra.s    PP_E0
  107.  
  108. PP_BA:        move.l    -(a0),d5
  109.         roxr.l    d7,d5
  110.         bra.s    PP_11A
  111.  
  112. PP_C0:        move.l    -(a0),d5
  113.         roxr.l    d7,d5
  114.         bra.s    PP_120
  115.  
  116. PP_C6:        move.l    -(a0),d5
  117.         roxr.l    d7,d5
  118.         bra.s    PP_126
  119.  
  120. PP_CC:        moveq    #0,d2
  121.         lsr.l    d7,d5
  122.         beq.s    PP_76
  123. PP_D2:        roxl.w    d7,d2
  124.         lsr.l    d7,d5
  125.         beq.s    PP_7C
  126. PP_D8:        roxl.w    d7,d2
  127.         move.b    d5,d4
  128.         lsr.l    #8,d5
  129.         beq.s    PP_9E
  130. PP_E0:        moveq    #0,d3
  131.         move.b    -$80(a5,d4.w),d3
  132.         cmp.w    #3,d2
  133.         bne.s    PP_168
  134.         bclr    #7,d3
  135.         beq.s    PP_13A
  136.         moveq    #13,d0
  137.         sub.b    (a2,d2.w),d0
  138.         move.w    d0,d1
  139.         add.w    d0,d0
  140.         add.w    d1,d0
  141.         add.w    d0,d0
  142.         jmp    PP_116(pc,d0.w)
  143.  
  144. PP_104:        move.l    -(a0),d5
  145.         roxr.l    d7,d5
  146.         bra.s    PP_12C
  147.  
  148. PP_10A:        move.l    -(a0),d5
  149.         roxr.l    d7,d5
  150.         bra.s    PP_132
  151.  
  152. PP_110:        move.l    -(a0),d5
  153.         roxr.l    d7,d5
  154.         bra.s    PP_138
  155.  
  156. PP_116:        lsr.l    d7,d5
  157.         beq.s    PP_BA
  158. PP_11A:        roxl.w    d7,d3
  159.         lsr.l    d7,d5
  160.         beq.s    PP_C0
  161. PP_120:        roxl.w    d7,d3
  162.         lsr.l    d7,d5
  163.         beq.s    PP_C6
  164. PP_126:        roxl.w    d7,d3
  165.         lsr.l    d7,d5
  166.         beq.s    PP_104
  167. PP_12C:        roxl.w    d7,d3
  168.         lsr.l    d7,d5
  169.         beq.s    PP_10A
  170. PP_132:        roxl.w    d7,d3
  171.         lsr.l    d7,d5
  172.         beq.s    PP_110
  173. PP_138:        roxl.w    d7,d3
  174. PP_13A:        moveq    #0,d1
  175.         lsr.l    d7,d5
  176.         beq.s    PP_156
  177. PP_140:        roxl.w    d7,d1
  178.         lsr.l    d7,d5
  179.         beq.s    PP_15C
  180. PP_146:        roxl.w    d7,d1
  181.         lsr.l    d7,d5
  182.         beq.s    PP_162
  183. PP_14C:        roxl.w    d7,d1
  184.         add.w    d1,d2
  185.         subq.w    #7,d1
  186.         beq.s    PP_13A
  187.         bra.s    PP_198
  188.  
  189. PP_156:        move.l    -(a0),d5
  190.         roxr.l    d7,d5
  191.         bra.s    PP_140
  192.  
  193. PP_15C:        move.l    -(a0),d5
  194.         roxr.l    d7,d5
  195.         bra.s    PP_146
  196.  
  197. PP_162:        move.l    -(a0),d5
  198.         roxr.l    d7,d5
  199.         bra.s    PP_14C
  200.  
  201. PP_168:        moveq    #13,d0
  202.         sub.b    (a2,d2.w),d0
  203.         move.w    d0,d1
  204.         add.w    d0,d0
  205.         add.w    d1,d0
  206.         add.w    d0,d0
  207.         jmp    PP_17A(pc,d0.w)
  208.  
  209. PP_17A:        lsr.l    d7,d5
  210.         beq.s    PP_1B0
  211. PP_17E:        roxl.w    d7,d3
  212.         lsr.l    d7,d5
  213.         beq.s    PP_1B6
  214. PP_184:        roxl.w    d7,d3
  215.         lsr.l    d7,d5
  216.         beq.s    PP_1BC
  217. PP_18A:        roxl.w    d7,d3
  218.         lsr.l    d7,d5
  219.         beq.s    PP_1C2
  220. PP_190:        roxl.w    d7,d3
  221.         lsr.l    d7,d5
  222.         beq.s    PP_1C8
  223. PP_196:        roxl.w    d7,d3
  224. PP_198:        move.b    (a1,d3.w),-(a1)
  225. PP_19C:        move.b    (a1,d3.w),-(a1)
  226.         dbra    d2,PP_19C
  227.         cmp.l    a1,a4
  228.         bcs    PP_26
  229. PP_1AA:        move.l    (sp)+,d0        ;d0=unpacked length
  230.         lsr.l    #8,d0            ;correct length
  231.         moveq    #0,d1            ;d1=result code = all ok!
  232.         rts
  233.  
  234. PP_1B0:        move.l    -(a0),d5
  235.         roxr.l    d7,d5
  236.         bra.s    PP_17E
  237.  
  238. PP_1B6:        move.l    -(a0),d5
  239.         roxr.l    d7,d5
  240.         bra.s    PP_184
  241.  
  242. PP_1BC:        move.l    -(a0),d5
  243.         roxr.l    d7,d5
  244.         bra.s    PP_18A
  245.  
  246. PP_1C2:        move.l    -(a0),d5
  247.         roxr.l    d7,d5
  248.         bra.s    PP_190
  249.  
  250. PP_1C8:        move.l    -(a0),d5
  251.         roxr.l    d7,d5
  252.         bra.s    PP_196
  253.  
  254.         or.l    #$40C020A0,d0
  255.         bra.s    PP_1B6
  256.  
  257.     dc.b    $10
  258.     dc.b    $90
  259.     dc.b    'P'
  260.     dc.b    $D0
  261.     dc.b    '0'
  262.     dc.b    $B0
  263.     dc.b    'p'
  264.     dc.b    $F0
  265.     dc.b    8
  266.     dc.b    $88
  267.     dc.b    'H'
  268.     dc.b    $C8
  269.     dc.b    '('
  270.     dc.b    $A8
  271.     dc.b    'h'
  272.     dc.b    $E8
  273.     dc.b    $18
  274.     dc.b    $98
  275.     dc.b    'X'
  276.     dc.b    $D8
  277.     dc.b    '8'
  278.     dc.b    $B8
  279.     dc.b    'x'
  280.     dc.b    $F8
  281.     dc.b    4
  282.     dc.b    $84
  283.     dc.b    'D'
  284.     dc.b    $C4
  285.     dc.b    '$'
  286.     dc.b    $A4
  287.     dc.b    'd'
  288.     dc.b    $E4
  289.     dc.b    $14
  290.     dc.b    $94
  291.     dc.b    'T'
  292.     dc.b    $D4
  293.     dc.b    '4'
  294.     dc.b    $B4
  295.     dc.b    't'
  296.     dc.b    $F4
  297.     dc.b    12
  298.     dc.b    $8C
  299.     dc.b    'L'
  300.     dc.b    $CC
  301.     dc.b    ','
  302.     dc.b    $AC
  303.     dc.b    'l'
  304.     dc.b    $EC
  305.     dc.b    $1C
  306.     dc.b    $9C
  307.     dc.b    '\'
  308.     dc.b    $DC
  309.     dc.b    '<'
  310.     dc.b    $BC
  311.     dc.b    '|'
  312.     dc.b    $FC
  313.     dc.b    2
  314.     dc.b    $82
  315.     dc.b    'B'
  316.     dc.b    $C2
  317.     dc.b    '"'
  318.     dc.b    $A2
  319.     dc.b    'b'
  320.     dc.b    $E2
  321.     dc.b    $12
  322.     dc.b    $92
  323.     dc.b    'R'
  324.     dc.b    $D2
  325.     dc.b    '2'
  326.     dc.b    $B2
  327.     dc.b    'r'
  328.     dc.b    $F2
  329.     dc.b    10
  330.     dc.b    $8A
  331.     dc.b    'J'
  332.     dc.b    $CA
  333.     dc.b    '*'
  334.     dc.b    $AA
  335.     dc.b    'j'
  336.     dc.b    $EA
  337.     dc.b    $1A
  338.     dc.b    $9A
  339.     dc.b    'Z'
  340.     dc.b    $DA
  341.     dc.b    ':'
  342.     dc.b    $BA
  343.     dc.b    'z'
  344.     dc.b    $FA
  345.     dc.b    6
  346.     dc.b    $86
  347.     dc.b    'F'
  348.     dc.b    $C6
  349.     dc.b    '&'
  350.     dc.b    $A6
  351.     dc.b    'f'
  352.     dc.b    $E6
  353.     dc.b    $16
  354.     dc.b    $96
  355.     dc.b    'V'
  356.     dc.b    $D6
  357.     dc.b    '6'
  358.     dc.b    $B6
  359.     dc.b    'v'
  360.     dc.b    $F6
  361.     dc.b    14
  362.     dc.b    $8E
  363.     dc.b    'N'
  364.     dc.b    $CE
  365.     dc.b    '.'
  366.     dc.b    $AE
  367.     dc.b    'n'
  368.     dc.b    $EE
  369.     dc.b    $1E
  370.     dc.b    $9E
  371.     dc.b    '^'
  372.     dc.b    $DE
  373.     dc.b    '>'
  374.     dc.b    $BE
  375.     dc.b    '~'
  376.     dc.b    $FE
  377. PPB_24E: dc.l    $18141C1
  378.     dc.l    $21A161E1
  379.     dc.l    $119151D1
  380.     dc.l    $31B171F1
  381.     dc.l    $98949C9
  382.     dc.l    $29A969E9
  383.     dc.l    $199959D9
  384.     dc.l    $39B979F9
  385.     dc.l    $58545C5
  386.     dc.l    $25A565E5
  387.     dc.l    $159555D5
  388.     dc.l    $35B575F5
  389.     dc.l    $D8D4DCD
  390.     dc.l    $2DAD6DED
  391.     dc.l    $1D9D5DDD
  392.     dc.l    $3DBD7DFD
  393.     dc.l    $38343C3
  394.     dc.l    $23A363E3
  395.     dc.l    $139353D3
  396.     dc.l    $33B373F3
  397.     dc.l    $B8B4BCB
  398.     dc.l    $2BAB6BEB
  399.     dc.l    $1B9B5BDB
  400.     dc.l    $3BBB7BFB
  401.     dc.l    $78747C7
  402.     dc.l    $27A767E7
  403.     dc.l    $179757D7
  404.     dc.l    $37B777F7
  405.     dc.l    $F8F4FCF
  406.     dc.l    $2FAF6FEF
  407.     dc.l    $1F9F5FDF
  408.     dc.l    $3FBF7FFF
  409.     dc.l    $10102
  410.     dc.l    $2020203
  411.     dc.l    $3030303
  412.     dc.l    $3030304
  413.     dc.l    $4040404
  414.     dc.l    $4040404
  415.     dc.l    $4040404
  416.     dc.l    $4040405
  417.     dc.l    $5050505
  418.     dc.l    $5050505
  419.     dc.l    $5050505
  420.     dc.l    $5050505
  421.     dc.l    $5050505
  422.     dc.l    $5050505
  423.     dc.l    $5050505
  424.     dc.l    $5050506
  425.     dc.l    $6060606
  426.     dc.l    $6060606
  427.     dc.l    $6060606
  428.     dc.l    $6060606
  429.     dc.l    $6060606
  430.     dc.l    $6060606
  431.     dc.l    $6060606
  432.     dc.l    $6060606
  433.     dc.l    $6060606
  434.     dc.l    $6060606
  435.     dc.l    $6060606
  436.     dc.l    $6060606
  437.     dc.l    $6060606
  438.     dc.l    $6060606
  439.     dc.l    $6060606
  440.     dc.l    $6060607
  441.     dc.l    $7070707
  442.     dc.l    $7070707
  443.     dc.l    $7070707
  444.     dc.l    $7070707
  445.     dc.l    $7070707
  446.     dc.l    $7070707
  447.     dc.l    $7070707
  448.     dc.l    $7070707
  449.     dc.l    $7070707
  450.     dc.l    $7070707
  451.     dc.l    $7070707
  452.     dc.l    $7070707
  453.     dc.l    $7070707
  454.     dc.l    $7070707
  455.     dc.l    $7070707
  456.     dc.l    $7070707
  457.     dc.l    $7070707
  458.     dc.l    $7070707
  459.     dc.l    $7070707
  460.     dc.l    $7070707
  461.     dc.l    $7070707
  462.     dc.l    $7070707
  463.     dc.l    $7070707
  464.     dc.l    $7070707
  465.     dc.l    $7070707
  466.     dc.l    $7070707
  467.     dc.l    $7070707
  468.     dc.l    $7070707
  469.     dc.l    $7070707
  470.     dc.l    $7070707
  471.     dc.l    $7070707
  472.     dc.l    $7070700
  473.     dc.b    $27
  474.     dc.b    $A7
  475.  
  476.